﻿using System;
// 4.4 匿名方法
// 匿名方法时C#2.0引入的特性，并通过C#3.0的lambda表达式得到大大扩展。
// 匿名方法类似于lambda表达式，但没有下面的特性：
//    确定类型的参数
//    表达式语法（匿名方法必须时语句块）
//    在指定到Expression<T>时，编译成表达式树的功能
// 写匿名方法的方法时：delegate关键字后面跟参数声明（可选），然后时方法体。

//以下面的委托为例：
//delegate int Transformer(int i);
//如下是实现和调用匿名方法：
//Transformer sqr = delegate (int x) { return x * x; };
//Console.WriteLine(sqr(3)); // 9
//第一行代码语义等同于下面的lambda表达式：
//Transformer sqr = (int x) => { return x * x; };
//或简写为：
//Transformer sqr = x => x*x;

//提示：完全省略参数声明是匿名方法独有的特性——即使委托需要这些参数声明。在声明带默认空句柄的事件时很有用，例如：
//public event EventHandler Clicked = delegate{};
//这样，在引发事件时就避免了检查是否为null。下面的写法也是合法的：
//Clicked += delegate{ Console.WriteLine("clicked"); }; // 无参数
//匿名方法和lambda表达式使用同样的方法捕获外部变量。

namespace _101_匿名方法
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}
